package com.cykj.order.domain.enums;

/**
 * 购物车操作类型枚举
 * 
 * @author cykj
 * @date 2025-01-20
 */
public enum CartOperationType {
    
    /**
     * 增加商品数量（固定增加1个）
     */
    ADD("ADD", "增加"),
    
    /**
     * 减少商品数量（固定减少1个）
     */
    REDUCE("REDUCE", "减少"),
    
    /**
     * 删除商品（从购物车中移除）
     */
    DELETE("DELETE", "删除");
    
    private final String code;
    private final String description;
    
    CartOperationType(String code, String description) {
        this.code = code;
        this.description = description;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据代码获取枚举值
     * 
     * @param code 操作类型代码
     * @return 对应的枚举值，如果不存在返回null
     */
    public static CartOperationType getByCode(String code) {
        if (code == null) {
            return null;
        }
        
        for (CartOperationType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return null;
    }
    
    /**
     * 判断是否为增加操作
     * 
     * @return true表示增加操作
     */
    public boolean isAdd() {
        return this == ADD;
    }
    
    /**
     * 判断是否为减少操作
     * 
     * @return true表示减少操作
     */
    public boolean isReduce() {
        return this == REDUCE;
    }
    
    /**
     * 判断是否为删除操作
     * 
     * @return true表示删除操作
     */
    public boolean isDelete() {
        return this == DELETE;
    }
    
    @Override
    public String toString() {
        return "CartOperationType{" +
                "code='" + code + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}
